package com.Logs.test_1_27_springbootlogs.controller;

import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.PostConstruct;

@Slf4j
@RestController
public class LoggerController {
    // 先去定义一个日志的对象
    //private static Logger logger = LoggerFactory.getLogger(LoggerController.class);// 第一种
   // private static Logger logger = LoggerFactory.getLogger("aaa"); // 第二种
    //                                                      这个日志对象的名称通常是当前类, 也就是第一种
    // 这时候打印的时候 会带有这个类的路径, 到时候直接看日志类型的最后一个就行了

    // Logger 注意这个 是来自 :slf4j   , 这个 LoggerFactory 也是

    // LoggerFactory  这是用的一个工厂设计模式
    // 工厂模式: 就是通过一个类, 由它来帮助我们来创建一些对象

    // slf4j 并不是真实的日志实现, 而是日志门面
    // 具体实现的是: log4j/2 logback 等..

    // 现在介绍一个模式: 门面模式
    // 也叫外观模式
    // slf4j 是门面模式的一个典型的应用
    // 门面模式的定义: , 提供了⼀个统⼀的接⼝, ⽤来访问⼦系统中的⼀群接⼝.
    //其主要特征是定义了⼀个⾼层接⼝, 让⼦系统更容易使⽤.

    // sl4j 比仅仅用到了 门面模式, 里面也用到了工厂模式等待

    // ⻔⾯模式主要包含2种⻆⾊:
    //外观⻆⾊(Facade): 也称⻔⾯⻆⾊，系统对外的统⼀接⼝.
    //⼦系统⻆⾊(SubSystem): 可以同时有⼀个或多个 SubSystem. 每个 SubSytem 都不是⼀个单独的类,
    //⽽是⼀个类的集合. SubSystem 并不知道 Facade 的存在, 对于 SubSystem ⽽⾔, Facade 只是另⼀个
    //客⼾端⽽已(即 Facade 对 SubSystem 透明)


    @PostConstruct // 初始化注解
    public void print(){
        System.out.println("打印日志");
        log.info("========日志框架打印的日志=========");
        log.error("=======我是error日志=======");
        log.warn("========我是warn日志========");
        log.debug("========我是debug日志========");
        log.trace("========我是trace日志========");
        //没有 fatal 日志

        // 运行之后会发现 只打印了前三个
        // 呢是因为Spring默认的日志级别是 Info 级别的
        // 也可以经过配置修改
        // logging:
        //  level:
        //    root: debug
    }
}
